package com.eastfair.auth.enumeration;

import com.eastfair.annotation.base.BaseEnum;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.Getter;

import java.util.stream.Stream;

/**
 * <p>
 * 实体注释中生成的类型枚举
 * 
 * </p>
 *
 * @author ligang
 * @date 2021-08-30
 */
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "OrganizationOrgTypeEnum", description = "组织类型#{project:项目;p_company_classify:项目下的公司分类;p_sponsor_classify:项目下的主办分类;p_audience_classify:项目下的观众分类;exhibition:展会;e_company_classify:展会下的公司分类;e_sponsor_classify:展会下的主办;e_audience_classify:展会下的观众分类;company_classify:公司组;company:公司;sponsor_classify:主办组;sponsor:主办;staff:员工;other:其他-枚举")
public enum OrganizationOrgTypeEnum implements BaseEnum {

    /**
     * PROJECT="项目"
     */
    PROJECT("项目"),
    /**
     * P_COMPANY_CLASSIFY="项目下的公司分类"
     */
    P_COMPANY_CLASSIFY("项目下的公司分类"),
    /**
     * P_SPONSOR_CLASSIFY="项目下的主办分类"
     */
    P_SPONSOR_CLASSIFY("项目下的主办分类"),
    /**
     * P_AUDIENCE_CLASSIFY="项目下的观众分类"
     */
    P_AUDIENCE_CLASSIFY("项目下的观众分类"),
    /**
     * EXHIBITION="展会"
     */
    EXHIBITION("展会"),
    /**
     * E_COMPANY_CLASSIFY="展会下的公司分类"
     */
    E_COMPANY_CLASSIFY("展会下的公司分类"),
    /**
     * E_SPONSOR_CLASSIFY="展会下的主办"
     */
    E_SPONSOR_CLASSIFY("展会下的主办"),
    /**
     * E_AUDIENCE_CLASSIFY="展会下的观众分类"
     */
    E_AUDIENCE_CLASSIFY("展会下的观众分类"),
    /**
     * COMPANY_CLASSIFY="公司组"
     */
    COMPANY_CLASSIFY("公司组"),
    /**
     * COMPANY="公司"
     */
    COMPANY("公司"),
    /**
     * SPONSOR_CLASSIFY="主办组"
     */
    SPONSOR_CLASSIFY("主办组"),
    /**
     * SPONSOR="主办"
     */
    SPONSOR("主办"),
    /**
     * STAFF="员工"
     */
    STAFF("员工"),
    /**
     * OTHER="其他"
     */
    OTHER("其他"),
    ;

    @ApiModelProperty(value = "描述")
    private String desc;


    /**
     * 根据当前枚举的name匹配
     */
    public static OrganizationOrgTypeEnum match(String val, OrganizationOrgTypeEnum def) {
        return Stream.of(values()).parallel().filter(item -> item.name().equalsIgnoreCase(val)).findAny().orElse(def);
    }

    public static OrganizationOrgTypeEnum get(String val) {
        return match(val, null);
    }

    public boolean eq(OrganizationOrgTypeEnum val) {
        return val != null && eq(val.name());
    }

    @Override
    @ApiModelProperty(value = "编码", allowableValues = "PROJECT,P_COMPANY_CLASSIFY,P_SPONSOR_CLASSIFY,P_AUDIENCE_CLASSIFY,EXHIBITION,E_COMPANY_CLASSIFY,E_SPONSOR_CLASSIFY,E_AUDIENCE_CLASSIFY,COMPANY_CLASSIFY,COMPANY,SPONSOR_CLASSIFY,SPONSOR,STAFF,OTHER", example = "PROJECT")
    public String getCode() {
        return this.name();
    }

}
